1   /*
2    * Copyright (C) 2006 The Guava Authors
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    * http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  
17  package com.google.common.base;
18  
19  import static com.google.common.base.CaseFormat.LOWER_CAMEL;
20  import static com.google.common.base.CaseFormat.LOWER_HYPHEN;
21  import static com.google.common.base.CaseFormat.LOWER_UNDERSCORE;
22  import static com.google.common.base.CaseFormat.UPPER_CAMEL;
23  import static com.google.common.base.CaseFormat.UPPER_UNDERSCORE;
24  
25  import com.google.common.annotations.GwtCompatible;
26  import com.google.common.testing.SerializableTester;
27  
28  import junit.framework.TestCase;
29  
30  /**
31   * Unit test for {@link CaseFormat}.
32   *
33   * @author Mike Bostock
34   */
35  @GwtCompatible(emulated = true)
36  public class CaseFormatTest extends TestCase {
37  
38    public void testIdentity() {
39      for (CaseFormat from : CaseFormat.values()) {
40        assertSame(from + " to " + from, "foo", from.to(from, "foo"));
41        for (CaseFormat to : CaseFormat.values()) {
42          assertEquals(from + " to " + to, "", from.to(to, ""));
43          assertEquals(from + " to " + to, " ", from.to(to, " "));
44        }
45      }
46    }
47  
48    public void testLowerHyphenToLowerHyphen() {
49      assertEquals("foo", LOWER_HYPHEN.to(LOWER_HYPHEN, "foo"));
50      assertEquals("foo-bar", LOWER_HYPHEN.to(LOWER_HYPHEN, "foo-bar"));
51    }
52  
53    public void testLowerHyphenToLowerUnderscore() {
54      assertEquals("foo", LOWER_HYPHEN.to(LOWER_UNDERSCORE, "foo"));
55      assertEquals("foo_bar", LOWER_HYPHEN.to(LOWER_UNDERSCORE, "foo-bar"));
56    }
57  
58    public void testLowerHyphenToLowerCamel() {
59      assertEquals("foo", LOWER_HYPHEN.to(LOWER_CAMEL, "foo"));
60      assertEquals("fooBar", LOWER_HYPHEN.to(LOWER_CAMEL, "foo-bar"));
61    }
62  
63    public void testLowerHyphenToUpperCamel() {
64      assertEquals("Foo", LOWER_HYPHEN.to(UPPER_CAMEL, "foo"));
65      assertEquals("FooBar", LOWER_HYPHEN.to(UPPER_CAMEL, "foo-bar"));
66    }
67  
68    public void testLowerHyphenToUpperUnderscore() {
69      assertEquals("FOO", LOWER_HYPHEN.to(UPPER_UNDERSCORE, "foo"));
70      assertEquals("FOO_BAR", LOWER_HYPHEN.to(UPPER_UNDERSCORE, "foo-bar"));
71    }
72  
73    public void testLowerUnderscoreToLowerHyphen() {
74      assertEquals("foo", LOWER_UNDERSCORE.to(LOWER_HYPHEN, "foo"));
75      assertEquals("foo-bar", LOWER_UNDERSCORE.to(LOWER_HYPHEN, "foo_bar"));
76    }
77  
78    public void testLowerUnderscoreToLowerUnderscore() {
79      assertEquals("foo", LOWER_UNDERSCORE.to(LOWER_UNDERSCORE, "foo"));
80      assertEquals("foo_bar", LOWER_UNDERSCORE.to(LOWER_UNDERSCORE, "foo_bar"));
81    }
82  
83    public void testLowerUnderscoreToLowerCamel() {
84      assertEquals("foo", LOWER_UNDERSCORE.to(LOWER_CAMEL, "foo"));
85      assertEquals("fooBar", LOWER_UNDERSCORE.to(LOWER_CAMEL, "foo_bar"));
86    }
87  
88    public void testLowerUnderscoreToUpperCamel() {
89      assertEquals("Foo", LOWER_UNDERSCORE.to(UPPER_CAMEL, "foo"));
90      assertEquals("FooBar", LOWER_UNDERSCORE.to(UPPER_CAMEL, "foo_bar"));
91    }
92  
93    public void testLowerUnderscoreToUpperUnderscore() {
94      assertEquals("FOO", LOWER_UNDERSCORE.to(UPPER_UNDERSCORE, "foo"));
95      assertEquals("FOO_BAR", LOWER_UNDERSCORE.to(UPPER_UNDERSCORE, "foo_bar"));
96    }
97  
98    public void testLowerCamelToLowerHyphen() {
99      assertEquals("foo", LOWER_CAMEL.to(LOWER_HYPHEN, "foo"));
100     assertEquals("foo-bar", LOWER_CAMEL.to(LOWER_HYPHEN, "fooBar"));
101     assertEquals("h-t-t-p", LOWER_CAMEL.to(LOWER_HYPHEN, "HTTP"));
102   }
103 
104   public void testLowerCamelToLowerUnderscore() {
105     assertEquals("foo", LOWER_CAMEL.to(LOWER_UNDERSCORE, "foo"));
106     assertEquals("foo_bar", LOWER_CAMEL.to(LOWER_UNDERSCORE, "fooBar"));
107     assertEquals("h_t_t_p", LOWER_CAMEL.to(LOWER_UNDERSCORE, "hTTP"));
108   }
109 
110   public void testLowerCamelToLowerCamel() {
111     assertEquals("foo", LOWER_CAMEL.to(LOWER_CAMEL, "foo"));
112     assertEquals("fooBar", LOWER_CAMEL.to(LOWER_CAMEL, "fooBar"));
113   }
114 
115   public void testLowerCamelToUpperCamel() {
116     assertEquals("Foo", LOWER_CAMEL.to(UPPER_CAMEL, "foo"));
117     assertEquals("FooBar", LOWER_CAMEL.to(UPPER_CAMEL, "fooBar"));
118     assertEquals("HTTP", LOWER_CAMEL.to(UPPER_CAMEL, "hTTP"));
119   }
120 
121   public void testLowerCamelToUpperUnderscore() {
122     assertEquals("FOO", LOWER_CAMEL.to(UPPER_UNDERSCORE, "foo"));
123     assertEquals("FOO_BAR", LOWER_CAMEL.to(UPPER_UNDERSCORE, "fooBar"));
124   }
125 
126   public void testUpperCamelToLowerHyphen() {
127     assertEquals("foo", UPPER_CAMEL.to(LOWER_HYPHEN, "Foo"));
128     assertEquals("foo-bar", UPPER_CAMEL.to(LOWER_HYPHEN, "FooBar"));
129   }
130 
131   public void testUpperCamelToLowerUnderscore() {
132     assertEquals("foo", UPPER_CAMEL.to(LOWER_UNDERSCORE, "Foo"));
133     assertEquals("foo_bar", UPPER_CAMEL.to(LOWER_UNDERSCORE, "FooBar"));
134   }
135 
136   public void testUpperCamelToLowerCamel() {
137     assertEquals("foo", UPPER_CAMEL.to(LOWER_CAMEL, "Foo"));
138     assertEquals("fooBar", UPPER_CAMEL.to(LOWER_CAMEL, "FooBar"));
139     assertEquals("hTTP", UPPER_CAMEL.to(LOWER_CAMEL, "HTTP"));
140   }
141 
142   public void testUpperCamelToUpperCamel() {
143     assertEquals("Foo", UPPER_CAMEL.to(UPPER_CAMEL, "Foo"));
144     assertEquals("FooBar", UPPER_CAMEL.to(UPPER_CAMEL, "FooBar"));
145   }
146 
147   public void testUpperCamelToUpperUnderscore() {
148     assertEquals("FOO", UPPER_CAMEL.to(UPPER_UNDERSCORE, "Foo"));
149     assertEquals("FOO_BAR", UPPER_CAMEL.to(UPPER_UNDERSCORE, "FooBar"));
150     assertEquals("H_T_T_P", UPPER_CAMEL.to(UPPER_UNDERSCORE, "HTTP"));
151     assertEquals("H__T__T__P", UPPER_CAMEL.to(UPPER_UNDERSCORE, "H_T_T_P"));
152   }
153 
154   public void testUpperUnderscoreToLowerHyphen() {
155     assertEquals("foo", UPPER_UNDERSCORE.to(LOWER_HYPHEN, "FOO"));
156     assertEquals("foo-bar", UPPER_UNDERSCORE.to(LOWER_HYPHEN, "FOO_BAR"));
157   }
158 
159   public void testUpperUnderscoreToLowerUnderscore() {
160     assertEquals("foo", UPPER_UNDERSCORE.to(LOWER_UNDERSCORE, "FOO"));
161     assertEquals("foo_bar", UPPER_UNDERSCORE.to(LOWER_UNDERSCORE, "FOO_BAR"));
162   }
163 
164   public void testUpperUnderscoreToLowerCamel() {
165     assertEquals("foo", UPPER_UNDERSCORE.to(LOWER_CAMEL, "FOO"));
166     assertEquals("fooBar", UPPER_UNDERSCORE.to(LOWER_CAMEL, "FOO_BAR"));
167   }
168 
169   public void testUpperUnderscoreToUpperCamel() {
170     assertEquals("Foo", UPPER_UNDERSCORE.to(UPPER_CAMEL, "FOO"));
171     assertEquals("FooBar", UPPER_UNDERSCORE.to(UPPER_CAMEL, "FOO_BAR"));
172     assertEquals("HTTP", UPPER_UNDERSCORE.to(UPPER_CAMEL, "H_T_T_P"));
173   }
174 
175   public void testUpperUnderscoreToUpperUnderscore() {
176     assertEquals("FOO", UPPER_UNDERSCORE.to(UPPER_UNDERSCORE, "FOO"));
177     assertEquals("FOO_BAR", UPPER_UNDERSCORE.to(UPPER_UNDERSCORE, "FOO_BAR"));
178   }
179 
180   public void testConverterToForward() {
181     assertEquals("FooBar", UPPER_UNDERSCORE.converterTo(UPPER_CAMEL).convert("FOO_BAR"));
182     assertEquals("fooBar", UPPER_UNDERSCORE.converterTo(LOWER_CAMEL).convert("FOO_BAR"));
183     assertEquals("FOO_BAR", UPPER_CAMEL.converterTo(UPPER_UNDERSCORE).convert("FooBar"));
184     assertEquals("FOO_BAR", LOWER_CAMEL.converterTo(UPPER_UNDERSCORE).convert("fooBar"));
185   }
186 
187   public void testConverterToBackward() {
188     assertEquals("FOO_BAR", UPPER_UNDERSCORE.converterTo(UPPER_CAMEL).reverse().convert("FooBar"));
189     assertEquals("FOO_BAR", UPPER_UNDERSCORE.converterTo(LOWER_CAMEL).reverse().convert("fooBar"));
190     assertEquals("FooBar", UPPER_CAMEL.converterTo(UPPER_UNDERSCORE).reverse().convert("FOO_BAR"));
191     assertEquals("fooBar", LOWER_CAMEL.converterTo(UPPER_UNDERSCORE).reverse().convert("FOO_BAR"));
192   }
193 
194   public void testConverter_nullConversions() {
195     for (CaseFormat outer : CaseFormat.values()) {
196       for (CaseFormat inner : CaseFormat.values()) {
197         assertNull(outer.converterTo(inner).convert(null));
198         assertNull(outer.converterTo(inner).reverse().convert(null));
199       }
200     }
201   }
202 
203   public void testConverter_toString() {
204     assertEquals(
205         "LOWER_HYPHEN.converterTo(UPPER_CAMEL)",
206         LOWER_HYPHEN.converterTo(UPPER_CAMEL).toString());
207   }
208 
209   public void testConverter_serialization() {
210     for (CaseFormat outer : CaseFormat.values()) {
211       for (CaseFormat inner : CaseFormat.values()) {
212         SerializableTester.reserializeAndAssert(outer.converterTo(inner));
213       }
214     }
215   }
216 }
217